package com.qikecn.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HtmlUtil {

    private static final String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; // 定义script的正则表达式  
    private static final String regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; // 定义style的正则表达式  
    private static final String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式  
    private static final String regEx_space = "\\s*|\t|\r|\n";//定义空格回车换行符  
      
    /** 
     * @param htmlStr 
     * @return 
     *  删除Html标签 
     */  
    public static String delHTMLTag(String htmlStr) {  
        Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);  
        Matcher m_script = p_script.matcher(htmlStr);  
        htmlStr = m_script.replaceAll(""); // 过滤script标签  
  
        Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);  
        Matcher m_style = p_style.matcher(htmlStr);  
        htmlStr = m_style.replaceAll(""); // 过滤style标签  
  
        Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);  
        Matcher m_html = p_html.matcher(htmlStr);  
        htmlStr = m_html.replaceAll(""); // 过滤html标签  
  
        Pattern p_space = Pattern.compile(regEx_space, Pattern.CASE_INSENSITIVE);  
        Matcher m_space = p_space.matcher(htmlStr);  
        htmlStr = m_space.replaceAll(""); // 过滤空格回车标签  
        return htmlStr.trim(); // 返回文本字符串  
    }  
    
    /** 
     * @param htmlStr 
     * @return 
     *  删除Html标签 
     */  
    public static String escapeHTMLTagAndReplaceSpace(String htmlStr) {  
        Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);  
        Matcher m_script = p_script.matcher(htmlStr);  
        htmlStr = m_script.replaceAll(""); // 过滤script标签  
  
        Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);  
        Matcher m_style = p_style.matcher(htmlStr);  
        htmlStr = m_style.replaceAll(""); // 过滤style标签  
  
        /*Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);  
        Matcher m_html = p_html.matcher(htmlStr);  
        htmlStr = m_html.replaceAll(""); // 过滤html标签  */
  
        /*Pattern p_space = Pattern.compile(regEx_space, Pattern.CASE_INSENSITIVE);  
        Matcher m_space = p_space.matcher(htmlStr);  
        htmlStr = m_space.replaceAll("");*/ // 过滤空格回车标签  
        
//        htmlStr = htmlStr.replaceAll(" ", "&nbsp;");
//        htmlStr = htmlStr.replaceAll("　", "&nbsp;");
//        htmlStr = htmlStr.replaceAll("\\t", "&nbsp;&nbsp;");
    		if(htmlStr != null) {
    			//引入common-lang-2.4.jar中
    			//一个方便做转义的工具类，主要是为了防止sql注入，xss注入攻击的功能
    			//htmlStr = StringEscapeUtils.escapeHtml(htmlStr);
    			//htmlStr = StringEscapeUtils.escapeJavaScript(htmlStr);
    			//htmlStr = StringEscapeUtils.escapeXml(htmlStr);
    		}else {
    			htmlStr = "";
    		}
    		//htmlStr = htmlStr.replaceAll("\\\\n", "<br/>");
    		//htmlStr = htmlStr.replaceAll("\\\\'", "'");
    		htmlStr = filterEmoji(htmlStr);
    		//htmlStr = toHTMLString(htmlStr);
        return htmlStr.trim(); // 返回文本字符串
    }  
    
    /**
     * 将emoji表情替换成空串
     *  
     * @param source
     * @return 过滤后的字符串
     */ 
    public static String filterEmoji(String source) { 
	     if (source != null && source.length() > 0) { 
	      return source.replaceAll("[\ud800\udc00-\udbff\udfff\ud800-\udfff]", ""); 
	     } else { 
	      return source; 
	     } 
    }
    
    public static String toHTMLString(String in) {
        StringBuffer out = new StringBuffer();
        for (int i = 0; in != null && i < in.length(); i++) {
            char c = in.charAt(i);
            if (c == '\'')
                out.append("&#039;");
            else if (c == '"')
                out.append("&#034;");
            else if (c == '<')
                out.append("&lt;");
            else if (c == '>')
                out.append("&gt;");
            else if (c == '&')
                out.append("&amp;");
            else if (c == ' ' || c == '　')
                out.append("&nbsp;");
            else if (c == '\n')
                out.append("<br/>");
            else if (c == '\t')
                out.append("&nbsp;&nbsp;");
            else
                out.append(c);
        }
        return out.toString();
    }
      
    public static String getTextFromHtml(String htmlStr){  
        htmlStr = delHTMLTag(htmlStr);  
        htmlStr = htmlStr.replaceAll(" ", "");  
        htmlStr = htmlStr.substring(0, htmlStr.indexOf("。")+1);  
        return htmlStr;  
    }  
      
    public static void main(String[] args) {  
        String str = "<div style='text-align:center;'> 整治“四风”   清弊除垢<br/><span style='font-size:14px;'> </span><span style='font-size:18px;'>公司召开党的群众路线教育实践活动动员大会</span><br/></div>";  
        System.out.println(filterEmoji(str));  
    }  
	
}